package com.zch.socket.socket.client;


import org.junit.Test;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ClientSocket2 {

    @Test
    public void test1() throws Exception{
        // 要连接的服务端IP地址和端口
        String host = "localhost";
        int port = 1066;
        // 与服务端建立连接,这条语句执行的时候，服务端执行serverSocket.accept() 创建连接
        Socket socket = new Socket(host, port);
        // 客户端发送消息，相对自己而言是输出。用输出流
        OutputStream outputStream = socket.getOutputStream();
        String message = "线程 "+Thread.currentThread().getName()+"发送客户端的请求BBB";
        socket.getOutputStream().write(message.getBytes("UTF-8"));
        //通过shutdownOutput高速服务器已经发送完数据，相当于告诉服务端，我这次数据发送完毕了，你可以接收了。传统的socket都是要么被关闭了，或者调用此方法，服务端才会开始读取消息。不然服务端不知道你是否发送完，是不会开始读取的。
        socket.shutdownOutput();

        //客户端接受服务端的响应，是从输入流里获取
        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int len;
        StringBuilder sb = new StringBuilder();
        while ((len = inputStream.read(bytes)) != -1) {
            //注意指定编码格式，发送方和接收方一定要统一，建议使用UTF-8
            sb.append(new String(bytes, 0, len,"UTF-8"));
        }
        System.out.println("get message from server: " + sb);

        inputStream.close();
        outputStream.close();
        socket.close();

    }

}
